////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  aectouch.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef AECTOUCH_H
#define AECTOUCH_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "aecglobalelements.h"

#define AECTOUCH_NAMESPACE_BEGIN namespace aecTouch {
#define AECTOUCH_NAMESPACE_END }

AECTOUCH_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// TouchConvergenceType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct TouchConvergenceType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// convSpeedAdjRatio
    ///
    /// Tuning Level:  often_tune
    /// Description:   specify the adjustment of convergence speed during touch AEC convergence
    /// Range:         [0,10]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT convSpeedAdjRatio;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// HistTargetAdjustParamType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct HistTargetAdjustParamType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// minTargetAdjRatio
    ///
    /// Tuning Level:  often_tune
    /// Description:   This value overrides the minimal target adjust ratio in normal histogram AEC.
    /// Range:         [0.1,1.0]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT minTargetAdjRatio;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// maxTargetAdjRatio
    ///
    /// Tuning Level:  often_tune
    /// Description:   This value overrides the maximal target adjust ratio in normal histogram AEC.
    /// Range:         [1.0,2.0]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT maxTargetAdjRatio;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// darkRefLow
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   This value overrides the darkRefLow in normal histogram AEC.
    /// Range:         [0,50]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT darkRefLow;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// satRefHigh
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   This value overrides the satRefHigh in normal histogram AEC.
    /// Range:         [100,255]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT satRefHigh;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ROIHistAdjZoneDataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct ROIHistAdjZoneDataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// darkLumaRatioRange
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   The ratio between ROI and frame luma to determine if an ROI is dark ROI.
    /// Comments:       Base Type Tuning Definition
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::StartEndType              darkLumaRatioRange;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// darkROIAdjustParams
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    HistTargetAdjustParamType darkROIAdjustParams;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// brightLumaRatioRange
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   The ratio between ROI and frame luma to determine if an ROI is bright ROI.
    /// Comments:       Base Type Tuning Definition
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::StartEndType              brightLumaRatioRange;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// brightROIAdjustParams
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    HistTargetAdjustParamType brightROIAdjustParams;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ROIHistAdjZoneType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct ROIHistAdjZoneType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// zoneTrigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::TriggerPointType       zoneTrigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// zoneData
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ROIHistAdjZoneDataType zoneData;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// TouchMeteringType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct TouchMeteringType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableTouchROI
    ///
    /// Tuning Level:  often_tune
    /// Description:   Enable Flag for Touch ROI AEC Adjustments
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    BOOL                enableTouchROI;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// weightTouchROI
    ///
    /// Tuning Level:  often_tune
    /// Description:   Specify the blending weight of Touch luma into metered luma
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT               weightTouchROI;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// weightTemporalFilter
    ///
    /// Tuning Level:  never_tune
    /// Description:   Temporal weight for Touch Luma and Metered luma transition. Higher weight will have faster transition to
    ///                Touch Luma
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT               weightTemporalFilter;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// centerWeightStrength
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Specify weighting of luma in the center of Touch ROI
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT               centerWeightStrength;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableTouchLEDMetering
    ///
    /// Tuning Level:  often_tune
    /// Description:   Enable flag for LED metering during touch
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    BOOL                enableTouchLEDMetering;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableTouchROIHistAdj
    ///
    /// Tuning Level:  often_tune
    /// Description:   Enable Flag for adjustment on Histogram AEC target calculation
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    BOOL                enableTouchROIHistAdj;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ROIHistAdjZone - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32              ROIHistAdjZoneCount;
    UINT32              ROIHistAdjZoneID;
    ROIHistAdjZoneType* ROIHistAdjZone;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// AECTouchType
/// Comments:       Touch Tuning Definition
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct AECTouchType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// touchMtr
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    TouchMeteringType    touchMtr;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// touchConv
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    TouchConvergenceType touchConv;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// AECTouchTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class AECTouchTypeClass : public ParameterModule, public AECTouchType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    AECTouchTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    AECTouchTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~AECTouchTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load TouchConvergenceType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadTouchConvergenceType(
        ParameterFileSymbolTableEntry* entry,
        TouchConvergenceType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load HistTargetAdjustParamType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadHistTargetAdjustParamType(
        ParameterFileSymbolTableEntry* entry,
        HistTargetAdjustParamType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ROIHistAdjZoneDataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadROIHistAdjZoneDataType(
        ParameterFileSymbolTableEntry* entry,
        ROIHistAdjZoneDataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ROIHistAdjZoneType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadROIHistAdjZoneType(
        ParameterFileSymbolTableEntry* entry,
        ROIHistAdjZoneType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load TouchMeteringType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadTouchMeteringType(
        ParameterFileSymbolTableEntry* entry,
        TouchMeteringType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load AECTouchType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadAECTouchType(
        ParameterFileSymbolTableEntry* entry,
        AECTouchType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        AECTouchType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload TouchMeteringType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadTouchMeteringType(
        TouchMeteringType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload AECTouchType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadAECTouchType(
        AECTouchType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class AECTouchTypeClass

AECTOUCH_NAMESPACE_END
#endif // AECTOUCH_H

